package day13.thread04;


/**
 * @author Xiao
 * @date 2021/8/6
 */
/**
 * 消费者步骤：
 *      *      ①判断桌子上是否有汉堡包；
 *      *      ②如果没有就等待；
 *      *      ③如果有就开吃；
 *      *      ④吃完之后，桌子上的汉堡包就没有了，叫醒等待的生产者继续生产，汉堡包的总数量减一。
 */
public class Consumer implements Runnable{
    private Production pd;
    public Consumer(Production pd) {
        this.pd = pd;
    }
    @Override
    public void run() {
        while (true) {
            synchronized (pd.getLock()) {
                if (pd.getCount() == 0) {
                    break;
                }
                if (pd.isFlag()) {
                    //有就开吃
                    System.out.println("吃货在吃汉堡包。");
                    //吃完之后，就没有汉堡包了，叫醒等待的生产者继续生产，汉堡包的总数量减一
                    pd.setFlag(false);
                    //notifyAll():唤醒这把锁上所有等待的线程
                    pd.getLock().notifyAll();
                    pd.setCount(pd.getCount() - 1);
                } else {
                    //没有就等待：使用什么对象当锁，就要用这个对象去调用等待和唤醒的方法。
                    try {
                        pd.getLock().wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
